Double data rate (“DDR”) dynamic random-access (“DRAM”) memory (hereinafter referred to as “DDR memory”) is a class of memory integrated circuits used in computing systems. DDR memory uses a clocking technique whereby two data bits are transferred per clock cycle, or once every clock edge, to significantly improve speed. DDR memory controller circuits may reside on a processor, ASSP, or ASIC semi-conductor device, or alternately may reside on semiconductor devices dedicated solely to the purpose of controlling DDR memories. The higher speed of DDR memories makes signal integrity, low phase-locked loop (“PLL”) jitter, and fast register propagation delay times increasingly critical. Thus, given these high clock rates and fast edge speeds, timing considerations become challenging; it is often the case that timing skews vary greatly from one system implementation to another, especially for systems with larger amounts of memory and a greater overall width of the memory bus.
In other words, the high speeds of DDR memories, and the very short valid data windows of DDR data, pose significant challenges when the memory controller is then implemented on a printed circuit board (“PCB”) with the associated memories and other integrated circuit chips. The speeds at which the memory controller must reliably operate make the PCB layout challenging for the engineers and designers of such system boards. These difficulties arise not from a functionality issue, but from the physical realities of working with valid data windows that are well within the magnitude of signal propagation delays. These timing requirements are further complicated by the variation in logic speed over process, temperature, and voltage variations associated with the particular PCB on which the memory controller and DDR memories are implemented. In general, the industry has responded by moving towards memory controllers that attempt to calibrate themselves during a power-on initialization and training sequence in order for the timing controller to adapt to a given system implementation.
A problem with such training sequences is that they were designed and implemented into the memory controller when it was manufactured to operate under a limited set of parameters, which cannot take into account variations and/or deviations from such predetermined parameters when the PCB manufacturer integrates the memory controller with the DDR memories and other circuitry onto the PCB. Furthermore, such training techniques may not take into account all of the process and operating variations under which the PCB experiences in the field by the ultimate customers. For example, it is not practical to design such training sequences within the memory controller to incorporate wide and extreme variations in operating conditions of the final computing device while also striving to ensure that the memory controller is able to transfer data to/from the memory devices at the desired high speeds.